package com.bjsxt.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bjsxt.domain.CashRecharge;
import com.bjsxt.domain.CashRechargeAuditRecord;
import com.bjsxt.dto.BuyGcnParamDto;
import com.bjsxt.modle.CashRechargeVo;
import com.bjsxt.modle.CashTradeVo;

import java.util.Date;

public interface CashRechargeService extends IService<CashRecharge> {

    /**
     * 根据条件分页查询 GCN 充值记录
     *
     * @param page      分页对象<CashRecharge>
     * @param coinId    币种 ID
     * @param userId    用户 ID
     * @param userName  用户名
     * @param mobile    手机号码
     * @param status    状态
     * @param numMin    最小充值金额
     * @param numMax    最大充值金额
     * @param startTime 开始日期
     * @param endTime   结束日期
     * @return 查询出的分页数据对象
     */
    Page<CashRechargeVo> pageByCoinIdAndUserIdAndUserNameAndMobileAndStatusAndNumAndCreateTime(Page<CashRecharge> page, Long coinId, Long userId, String userName, String mobile, Byte status, Integer numMin, Integer numMax, Date startTime, Date endTime);

    /**
     * 现金的充值审核
     *
     * @param userId                  审核人 id
     * @param cashRechargeAuditRecord 充值审核记录
     * @return true 审核成功 false 审核失败
     */
    boolean cashRechargeAudit(Long userId, CashRechargeAuditRecord cashRechargeAuditRecord);

    /**
     * 根据用户 id 和审核状态查询 GCN 充值记录
     *
     * @param page   分页对象<CashRecharge>
     * @param userId 用户 id
     * @param status 状态：0-待审核；1-审核通过；2-拒绝；3-充值成功；
     * @return 查询出的分页数据对象
     */
    Page<CashRecharge> pageByUserIdAndStatus(Page<CashRecharge> page, Long userId, Byte status);

    /**
     * GCN 充值
     *
     * @param userId         需要进行重置的用户 id
     * @param buyGcnParamDto 购买 GCN 传输类对象
     * @return 现金交易数据响应对象
     */
    CashTradeVo buyGcn(Long userId, BuyGcnParamDto buyGcnParamDto);
}
